<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--
(C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com . 
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../boost.css">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Serialization - To Do</title>
</head>
<body link="#0000ff" vlink="#800080">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
  <tr> 
    <td valign="top" width="300"> 
      <h3><a href="../../../index.htm"><img height="86" width="277" alt="C++ Boost" src="../../../boost.png" border="0"></a></h3>
    </td>
    <td valign="top"> 
      <h1 align="center">Serialization</h1>
      <h2 align="center">To Do</h2>
    </td>
  </tr>
</table>
<hr>
<dl class="index">
  <dt><a href="#portablebinaryarchives">Portable Binary Archives</a></dt>
  <dt><a href="#performancetesting">Performance Testing and Profiling</a></dt>
  <dt><a href="#backversioning">Back Versioning</a></dt>
  <dt><a href="#nortti">Testing for Environments with No RTTI</a></dt>
  <dt><a href="new_case_studies.html">Additional Case Studies</a></dt>
</dl>

These are enhancements that the serialization library needs but have not been done.
Some of these projects, though tricky, are not huge and would be suitable
for someone who has a limited time to spend on them.  In particular, they
might be of interest as student projects such as the Google Summer of Code.

<h2><a name="portablebinaryarchives"></a>Portable Binary Archives</h2>
Currently there is a portable binary archive in the examples directory.
It is not regularly submitted to the exhaustive boost testing regimen
but it is tested occasionally and has been used in production code.
<p>
It's missing the following:
<ul>
  <li>Addition of portable floating point types.  This is not trivial.  In addition to
  handling floating point types of varying sizes, It requires
  handling invalid floating point numbers (NaNs) in a portable manner.
  <li>Integration into the Boost testing regimen similar to the other archive classes.
</ul>

<h2><a name="performancetesting"></a>Performance Testing and Profiling</h2>

I've managed to setup performance profiling using the following:
<ul>
  <li>current (as I write this) Boost.Build tools.
  <li>the gcc compiler.
  <li>and a shell script - profile.sh
  <li>library_status program from the tools/regression/src directory
</ul>
Invoking profile script produces a 
<a href="performance_status.html">table</a>
which shows the results of each test and links to the actual
profile.
<p>
The first thing I did was include some of the serialization library tests.
It became immediately apparent that these tests were totally unsuitable
for performance testing and that new tests needed to be written for this 
purpose.  These tests would highlight the location of any performance
bottlenecks in the serialization library.  Whenever I've subjected my
code in the past to this type of analysis, I've always been surprised
to find bottlenecks in totally unanticipated places and fixing those
has always led to large improvements in performance.  I expect that
this project would have a huge impact on the utility of the serialization
library.

<h2><a name="backversioning"></a>Back Versioning</h2>

It has been suggested that a useful feature of the library would be
the ability to create "older versions" of archives.  Currently,
the library permits one to make programs that are guaranteed
the ability to load archives with classes of a previous version. 
But there is no way to save classes in accordance with a
previous version.  At first I dismissed this as a huge project
with small demand.  A cursory examination of the code revealed
that this would not be very difficult.  It would require some
small changes in code and some additional tests.  Also it
would require special treatment in the documentation - perhaps
a case study.


<h2><a name="nortti"></a>Environments without RTTI</h2>

I note that some have commented that this library requires RTTI.
This is not strictly true.  The examples and almost all the
tests presume the existence of RTTI.  But it should be possible
to use the library without it.  The example used for testing is an 
<code style="white-space: normal">extended_typeinfo</code> 
implemenation which presumes that all classes names have been exported. 
So, to make this library compatible for platforms without RTTI, 
a set of tests, examples and new manual section would have to be created.

<hr>
<p>Revised 1 November, 2008 
<p><i>&copy; Copyright <a href="http://www.rrsd.com">Robert Ramey</a> 2002-2008. 
Distributed under the Boost Software License, Version 1.0. (See
accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
</i></p>
</body>
</html>
